.NET MAUI は「1つのコードで Windows / macOS / iOS / Android を開発できる」フレームワークですが、 その分、プロジェクト構造が少し複雑に見えることがあります。
この記事では、MAUI プロジェクトを構成するフォルダ・ファイルの役割を実務目線でわかりやすく解説します。 MAUI を理解するうえで、この構造を押さえることは非常に重要です。
.NET MAUI プロジェクトの全体構造
MAUI プロジェクトを作成すると、次のような構造になります。
MyMauiApp/
├─ App.xaml
├─ App.xaml.cs
├─ MainPage.xaml
├─ MainPage.xaml.cs
├─ MauiProgram.cs
├─ Platforms/
│ ├─ Android/
│ ├─ iOS/
│ ├─ MacCatalyst/
│ └─ Windows/
├─ Resources/
│ ├─ Fonts/
│ ├─ Images/
│ ├─ Raw/
│ └─ Styles/
├─ wwwroot/(Blazor Hybrid の場合)
└─ MyMauiApp.csproj
ここから、各フォルダ・ファイルの役割を詳しく見ていきます。
1. App.xaml / App.xaml.cs(アプリ全体の設定)
MAUI アプリのエントリーポイント(UI側)です。 アプリ全体のリソース(色・スタイル・テーマ)を定義します。
- アプリ全体のスタイル設定
- テーマ(ライト/ダーク)の定義
- 最初に表示するページの指定
// App.xaml.cs の例
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
WPF の App.xaml に近い役割です。
2. MainPage.xaml / MainPage.xaml.cs(最初に表示される画面)
アプリ起動時に最初に表示されるページです。 UI は XAML、ロジックは C# で記述します。
// MainPage.xaml の例
MAUI の UI は WPF に近い構造で、MVVM と相性が良いのが特徴です。
3. MauiProgram.cs(DI・サービス登録・アプリ設定)
MAUI アプリの起動設定・DI(依存性注入)・サービス登録を行うファイルです。 ASP.NET Core の Program.cs に近い役割を持ちます。
// MauiProgram.cs の例
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});
builder.Services.AddSingleton<MainPage>();
return builder.Build();
}
MAUI のアプリ構成はここで決まります。
4. Platforms フォルダ(OSごとの処理)
MAUI の特徴である「クロスプラットフォーム」を支えるフォルダです。 OSごとに必要な設定やネイティブコードをここに配置します。
- Android: AndroidManifest.xml、MainActivity.cs など
- iOS: AppDelegate.cs、Info.plist
- MacCatalyst: Mac向け設定
- Windows: Package.appxmanifest、ウィンドウ設定
通常の UI やロジックは共通化できますが、 OS固有の機能(通知・センサー・権限など)はここで実装します。
5. Resources フォルダ(画像・フォント・スタイルなど)
MAUI のリソースはすべて Resources にまとめられます。 MAUI はビルド時にリソースを自動処理してくれるため、非常に扱いやすい構造です。
Resources/Images
画像ファイル(png / jpg / svg)を置く場所。
Resources/Fonts
カスタムフォントを置く場所。
Resources/Styles
アプリ全体のスタイル(色・テーマ)を定義。
Resources/Raw
設定ファイルやJSONなど、加工せずに使いたいファイルを置く。
6. wwwroot(Blazor Hybrid の場合)
MAUI で Blazor を使う場合に生成されるフォルダです。 Webアプリの静的ファイル(HTML / CSS / JS)を配置します。
「ネイティブアプリ × Web UI」というハイブリッド構成が可能になります。
7. .csproj(プロジェクト設定)
MAUI のプロジェクト設定を記述するファイルです。 ターゲットOS、使用するSDK、リソース設定などが含まれます。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-windows10.0.19041.0</TargetFrameworks>
<UseMaui>true</UseMaui>
</PropertyGroup>
</Project>
MAUI のビルド対象OSはここで指定します。
まとめ:MAUIのプロジェクト構造は「共通UI+OS固有」のハイブリッド
- App.xaml: アプリ全体の設定
- MainPage.xaml: 最初の画面
- MauiProgram.cs: DI・サービス登録
- Platforms: OS固有の処理
- Resources: 画像・フォント・スタイル
- .csproj: ターゲットOSやビルド設定
MAUI のプロジェクト構造は一見複雑に見えますが、 「共通コード」と「OS固有コード」が明確に分かれているため、慣れると非常に扱いやすい構造です。
この構造を理解することで、MAUI 開発のスピードと品質が大きく向上します。